package pe.com.ztaxi.taxis.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.com.ztaxi.taxis.dao.ZonaDAO;
import pe.com.ztaxi.taxis.model.Punto;
import pe.com.ztaxi.taxis.model.Zona;
import pe.com.ztaxi.taxis.service.ZonaService;
import pe.com.ztaxi.taxis.util.PolylineEncoder;

@Service
public class ZonaServiceImpl implements ZonaService {

	private static final Logger LOGGER = LoggerFactory
			.getLogger(ZonaServiceImpl.class);

	@Resource
	private ZonaDAO zonaDAO;

	@Transactional(readOnly = true)
	@Override
	public Zona ubicarZona(String nombreZona) {
		LOGGER.debug("Buscando zona con nombre: " + nombreZona);
		return zonaDAO.buscarPorNombre(nombreZona);
	}

	@Transactional(readOnly = true)
	@Override
	public Zona ubicarZona(double latitud, double longitud) {
		// TODO por implementar
		return null;
	}

	@Transactional
	public void actualizarPoligono(Integer idZona, String nombreZona, ArrayList<Punto> puntos) {
		Zona zona = zonaDAO.findOne(idZona);
		zona.setNombre(nombreZona);
		String poligono = PolylineEncoder.encode(puntos);
		zona.setPoligono(poligono);
		zonaDAO.save(zona);
		
	}

	@Transactional
	public void registrarZona(String nombreZona, ArrayList<Punto> puntos) {
		Zona zona = new Zona();
		zona.setNombre(nombreZona);
		String poligono = PolylineEncoder.encode(puntos);
		zona.setPoligono(poligono);
		zonaDAO.save(zona);
		
	}
	
	@Transactional
	public List<Zona> buscarTodas() {		
		return zonaDAO.findAll();
	}
}
